/** 
* Projet AP5 - Agenda PDA
* AgendaView.java
*/

package pda.view;

import pda.control.*;
import pda.datas.*;

import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import javax.swing.SwingConstants;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
import javax.swing.JList;
import javax.swing.DefaultListModel	;
import javax.swing.JScrollPane	;
import javax.swing.JComboBox	;

import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Dimension;

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Date;
import java.util.ArrayList;

import java.text.SimpleDateFormat;

import java.io.File;


/**
* Classe qui creer l'interface graphique de l'agenda.
*/
public class AgendaView {
	
//##########################################################################################################
//										Declaration des variables
//##########################################################################################################
	

	/** L'objet de la classe SpecificCalendar*/
	private SpecificCalendar leCalendrier;

	/** L'objet de la classe AgendaControl */
	private AgendaControl controller;

	/** L'objet de la classe DateDisplayed */
	public DateDisplayed specialDate ;	

	/** Panneau */ 
	private JPanel panel = new JPanel();
	
	/** Liste des evenements */
	private JList listeEvt;
	/** Liste des sauvegarde des fiches  */
	private JList listeFic;


	/** Chaine de caractère du label de la date choisi */
	private String dateChoosenLbl;
	/** Chaine de caractère de la selection de l'item Activite */
	private String selectItemAct= "";
	/** Chaine de caractère */
	private String leFic = "";
	/** Menu Pop-Up Option */
	private JPopupMenu optionPane;
	/** Objet du menu Options pour Nouvelle Activite */
	private JMenu addAct; 
	/** Objet du menu Options pour Supprimer Activite */
	private JMenu delete;
	/** Etiquette de  */
	private JLabel dateChoosen;
	/** Etiquette de  */
	private JLabel entry ;


	/** Bouton Retour */
	private JButton retour;
	/** Bouton Option pour ajouter, supprimer, etc.. */
	private JButton option;
	/** Bouton pour les Rendez-vous */
	private JButton rdv;
	/** Bouton pour les Cours */
	private JButton course;
	/** Bouton pour les Reunion */
	private JButton meeting;
	/** Bouton pour aller au mois precedent */
	private JButton prev;
	/** Bouton pour aller au mois suivant */
	private JButton next;


	/** Panneau principal */
	private JPanel main;
	/** Panneau pour les boutons Options et Retour */
	private JPanel optionBar;
	/** Panneau pour les changements de Mois */
	private JPanel moveDate;
	/** Panneau pour les boutons d'ajouts de cours, reunion, et rendez-vous */
	private JPanel taskBar;
	/** Panneau du Calendrier */
	private JPanel cal;
	/** Panneau d'affichage */
	private JPanel display;
	/** Panneau des activites */
	private JPanel activity;


	/** Objet du menu Option */
 	private JMenuItem changeView;

	
	/** Objet du menu Options pour charger l'agenda */
	private JMenuItem open;
	/** Objet du menu Options pour sauvegarder l'agenda */
	private JMenuItem save;
	/** Objet du menu Options pour chercher un evenement a une date */
	private JMenuItem searchDate;
	/** Objet du menu Supprimer Activite du menu Options pour supprimer les evenements passes */
	private JMenuItem delAnEvt;
	/** Objet du menu Supprimer Activite du menu Options pour supprimer l'evenement selectionne */
	private JMenuItem delPrevEvt;
	/** Objet du menu Supprimer Activite du menu Options pour supprimer tout les evenements */
	private JMenuItem delAllEvt;
	/** Objet du menu Nouvelle Activite du menu Options pour ajouter un Cours */
	private JMenuItem addCourse;
	/** Objet du menu Nouvelle Activite du menu Options pour ajouter un Rendez-vous */
	private JMenuItem addRdv;
	/** Objet du menu Nouvelle Activite du menu Options pour ajouter une Activite */
	private JMenuItem addActivity;
	/** Objet du menu Nouvelle Activite du menu Options pour ajouter une Reunion */
	private JMenuItem addMeeting ;

	/** Tableau de chaine de caractère pour les jours de la semaine */
	private String[] dayName = {"","Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};

	/** Champ de texte */
	private JTextField nomFic;

	/** Menu deroulant pour les jours */
	private JComboBox day;
	/** Menu deroulant pour les jours */
	private JComboBox month;
	/** Menu deroulant pour les jours */
	private JComboBox year;

	/** Booleen pour la recherche */
	private boolean search = false; 
	
	//##########################################################################################################
	//										Constructeur
	//##########################################################################################################
	/**
	*  The AgendaView constructor which initialize the controller, and the special listener for the main calendar
	*
	* @param controller the that is transmitted by the controller
	*/
	public AgendaView(AgendaControl controller) {
		this.controller = controller;
		String date = new SimpleDateFormat("EEEEEEEE d/M/yyyy").format(new Date());
		dateChoosenLbl = ((String.valueOf(date.charAt(0))).toUpperCase())+ date.substring(1);
		
		leCalendrier = new SpecificCalendar(this, controller);
		specialDate = new DateDisplayed();
	}

	
	//###########################################################################################
	//							Gestion Panneau d'activite
	//###########################################################################################
	
	/**
	* Methode qui rafraichi la vue */
	public void refresh(){
		main.validate();
		main.repaint();
	}
	
	/**
	* 
	* @param type 
	*/
	public void LoadOrSave(String type){
		
		JPanel panelGestion = new JPanel(new BorderLayout());
		JPanel panelNew = new JPanel(new GridLayout(2,1));
		JLabel text = new JLabel("Nouveau nom :");
		JPanel btnPanel =  new JPanel();
		JButton valider = new JButton(type);
		File monRepertoire=new File("data/sauvegarde");
		File[] f = monRepertoire.listFiles();
		
		nomFic = new JTextField(25);
		listeFic = new JList(new DefaultListModel());
		retour.setEnabled(true);
		
		main.removeAll();
		
		listeFic.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);	
		
		nomFic.addMouseListener(controller);
		listeFic.addMouseListener(controller);
		valider.addActionListener(controller);
		valider.setActionCommand(type);
		
		
		
		btnPanel.add(valider);
		panelNew.add(text);
		panelNew.add(nomFic);
		panelGestion.add(panelNew,BorderLayout.NORTH);
		panelGestion.add(listeFic,BorderLayout.CENTER);
		panelGestion.add(btnPanel,BorderLayout.SOUTH);
		main.add( panelGestion);
		
		for (File unFic : f)
			if (!unFic.getName().equals("agendaDefault") && !unFic.getName().equals("contact.out"))
				((DefaultListModel)listeFic.getModel()).addElement(unFic.getName());
				
		refresh();
		
		
	}
	
	/**
	* @return le nom du fichier our la sauvegarde
	*/
	public String getSaveLoadFile(){
		String ret = "";
		if ( nomFic.getText().length() != 0 ){
			ret = nomFic.getText();
		}else if (leFic.length() != 0 ){
			ret = leFic ;
		} else {
			ret = "";
		}
		return ret;
	}
	
	/**
	* Methode qui permet de rechercher une date */
	public void search(){
		main.removeAll();
		search = true ;
		JPanel panelSearch = new JPanel(new BorderLayout());
		JPanel panelHaut = new JPanel(new GridLayout(2,1));
		
		listeEvt = new JList(new DefaultListModel());
		JScrollPane scroll = new JScrollPane(listeEvt);
		DefaultListCellRenderer centerRenderer = new DefaultListCellRenderer();
		centerRenderer.setHorizontalAlignment(JLabel.CENTER);
		listeEvt.setCellRenderer(centerRenderer);
		listeEvt.addMouseListener(new EcouteurListeActivity(controller.getEngine(), this));
		
		JPanel panelDateSelecteur = new JPanel();
		String[] dayL = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"};
		day = new JComboBox(dayL);
		String[] monthL = {"1","2","3","4","5","6","7","8","9","10","11","12"};
		month = new JComboBox(monthL);
		String[] yearL = new String[101];
		for (int i = 0 ; i < 101 ; i ++)
			yearL[i] = String.valueOf(i+1950);
			
		year = new JComboBox(yearL);
		JLabel sep1 = new JLabel("/");
		JLabel sep2 = new JLabel("/");
		panelDateSelecteur.add(day);
		panelDateSelecteur.add(sep1);
		panelDateSelecteur.add(month);
		panelDateSelecteur.add(sep2);
		panelDateSelecteur.add(year);
		day.addActionListener(controller);
		month.addActionListener(controller);
		year.addActionListener(controller);
		day.setActionCommand("searchChange");
		month.setActionCommand("searchChange");
		year.setActionCommand("searchChange");
		
		JPanel panelTitre = new JPanel();
		JLabel lblTitre = new JLabel("Recherche d'une date");
		lblTitre.setHorizontalAlignment(SwingConstants.CENTER);	
		panelTitre.add(lblTitre);
		
		panelSearch.add(panelHaut, BorderLayout.NORTH);
		panelSearch.add(scroll, BorderLayout.CENTER);
		
		panelHaut.add(panelTitre);
		panelHaut.add(panelDateSelecteur);
		
		main.add(panelSearch);
		retour.setEnabled(true);
		refresh();
	}
	
	/**
	* Methode qui affiche un recapitulatif de l'evenement selectionne par un click droit.
	* @param datas L'ArrayList contenant les informations de l'evenement
	*/
	public void recapitulatifEvt(ArrayList<String> datas){
		main.removeAll();
		JPanel resumePanel = new JPanel();
		JScrollPane scroll = new JScrollPane(resumePanel);
		retour.setEnabled(true);
		resumePanel.setBackground(Color.black);
		resumePanel.setForeground(Color.white);
		
		main.add(scroll);
		ActivityPanel actPanel = new ActivityPanel(controller, this);
		//prend les evenements et les affiche.
		String typeAct = datas.get(0);

		//Recapitulatid pour les activites
		if (typeAct.equals("activite") ){

			actPanel.setPanelActivity();
			actPanel.getMotif().setText(datas.get(1));
			actPanel.getMotif().setEnabled(false);
			actPanel.getMotif().setBackground(Color.black);
			
			actPanel.getHeureD().setText(datas.get(2));
			actPanel.getHeureD().setEnabled(false);
			actPanel.getHeureD().setBackground(Color.black);
			
			actPanel.getHeureF().setText(datas.get(3));
			actPanel.getHeureF().setEnabled(false);
			actPanel.getHeureF().setBackground(Color.black);
			
			actPanel.getMinuteD().setText(datas.get(4));
			actPanel.getMinuteD().setEnabled(false);
			actPanel.getMinuteD().setBackground(Color.black);
			
			actPanel.getMinuteF().setText(datas.get(5));
			actPanel.getMinuteF().setEnabled(false);
			actPanel.getMinuteF().setBackground(Color.black);
			
			actPanel.getRepetition();
			actPanel.getValidate().setText("Supprimer");
			actPanel.getValidate().setActionCommand("deleteOne");
			
		//Recapitulatid pour les cours
		}else if (typeAct.equals("cours") ){

			actPanel.setPanelCourse();
			actPanel.getMotif().setText(datas.get(1));
			actPanel.getMotif().setEnabled(false);
			actPanel.getMotif().setBackground(Color.black);
			
			actPanel.getHeureD().setText(datas.get(2));
			actPanel.getHeureD().setEnabled(false);
			actPanel.getHeureD().setBackground(Color.black);
			
			actPanel.getHeureF().setText(datas.get(3));
			actPanel.getHeureF().setEnabled(false);
			actPanel.getHeureF().setBackground(Color.black);
			
			actPanel.getMinuteD().setText(datas.get(4));
			actPanel.getMinuteD().setEnabled(false);
			actPanel.getMinuteD().setBackground(Color.black);
			
			actPanel.getMinuteF().setText(datas.get(5));
			actPanel.getMinuteF().setEnabled(false);
			actPanel.getMinuteF().setBackground(Color.black);
			
			actPanel.getLieu().setText(datas.get(6));
			actPanel.getLieu().setEnabled(false);
			actPanel.getLieu().setBackground(Color.black);
						
			actPanel.getProf().setText(datas.get(7));
			actPanel.getProf().setEnabled(false);
			actPanel.getProf().setBackground(Color.black);
			
			actPanel.getMatiere().setText(datas.get(8));
			actPanel.getMatiere().setEnabled(false);
			actPanel.getMatiere().setBackground(Color.black);

			actPanel.getRepetition();
			actPanel.getValidate().setText("Supprimer");
			actPanel.getValidate().setActionCommand("deleteOne");
			
		//Recapitulatid pour les rendez-vous
		}else if (typeAct.equals("rdv") ){

			actPanel.setPanelRdv();
			actPanel.getMotif().setText(datas.get(1));
			actPanel.getMotif().setEnabled(false);
			actPanel.getMotif().setBackground(Color.black);
			
			actPanel.getHeureD().setText(datas.get(2));
			actPanel.getHeureD().setEnabled(false);
			actPanel.getHeureD().setBackground(Color.black);
			
			actPanel.getHeureF().setText(datas.get(3));
			actPanel.getHeureF().setEnabled(false);
			actPanel.getHeureF().setBackground(Color.black);
			
			actPanel.getMinuteD().setText(datas.get(4));
			actPanel.getMinuteD().setEnabled(false);
			actPanel.getMinuteD().setBackground(Color.black);
			
			actPanel.getMinuteF().setText(datas.get(5));
			actPanel.getMinuteF().setEnabled(false);
			actPanel.getMinuteF().setBackground(Color.black);
			
			actPanel.getLieu().setText(datas.get(6));
			actPanel.getLieu().setEnabled(false);
			actPanel.getLieu().setBackground(Color.black);
						
			actPanel.getInvite().setText(datas.get(7));
			actPanel.getInvite().setEnabled(false);
			actPanel.getInvite().setBackground(Color.black);

			actPanel.getRepetition();
			actPanel.getValidate().setText("Supprimer");
			actPanel.getValidate().setActionCommand("deleteOne");
			
		//Recapitulatid pour les reunions
		}else if (typeAct.equals("reunion") ){

			actPanel.setPanelMeeting();
			actPanel.getMotif().setText(datas.get(1));
			actPanel.getMotif().setEnabled(false);
			actPanel.getMotif().setBackground(Color.black);
			
			actPanel.getHeureD().setText(datas.get(2));
			actPanel.getHeureD().setEnabled(false);
			actPanel.getHeureD().setBackground(Color.black);
			
			actPanel.getHeureF().setText(datas.get(3));
			actPanel.getHeureF().setEnabled(false);
			actPanel.getHeureF().setBackground(Color.black);
			
			actPanel.getMinuteD().setText(datas.get(4));
			actPanel.getMinuteD().setEnabled(false);
			actPanel.getMinuteD().setBackground(Color.black);
			
			actPanel.getMinuteF().setText(datas.get(5));
			actPanel.getMinuteF().setEnabled(false);
			actPanel.getMinuteF().setBackground(Color.black);
			
			actPanel.getLieu().setText(datas.get(6));
			actPanel.getLieu().setEnabled(false);
			actPanel.getLieu().setBackground(Color.black);

			actPanel.getInitiateur().setText(datas.get(7));
			actPanel.getInitiateur().setEnabled(false);
			actPanel.getInitiateur().setBackground(Color.black);

			actPanel.getInvite().setText(datas.get(8));
			actPanel.getInvite().setEnabled(false);
			actPanel.getInvite().setBackground(Color.black);

			actPanel.getMail().setText(datas.get(9));
			actPanel.getMail().setEnabled(false);
			actPanel.getMail().setBackground(Color.black);

			actPanel.getDuree().setText(datas.get(10));
			actPanel.getDuree().setEnabled(false);
			actPanel.getDuree().setBackground(Color.black);

			actPanel.getRepetition();
			actPanel.getValidate().setText("Supprimer");
			actPanel.getValidate().setActionCommand("deleteOne");
			
		}

	
	}
	
//###########################################################################################
//							Gestion des panneaux du Home
//###########################################################################################

	//=======================================================================================initHome

	/**
	* Methode qui initialise les principaux composant de l'ihm et les places */
	public void initHome(){

		panel.removeAll();
		panel.setBackground(Color.black);
		panel.setLayout(new BorderLayout());
		main = new JPanel();
		panel.add(main, BorderLayout.CENTER);
		main.setLayout(new BorderLayout());

		//appel des methodes d'initialisation
		this.initOptionBar("home"); //la bar tout en bas parametre pour empecher certains menu ou en ajouter d'autre en fonction de la page
		this.initHomeTaskBar();	//la bar avec image pour ajouter evenement
		this.initHomeDateChooser(); //laffichage de la date et des curseurs tout en haur
		this.initHomeDisplay();//affiche le calendrier en mois ou semaine selon le parametre
		this.initEntrySelect(); // affiche les evt du jour si existant
		main.repaint();
		main.validate();
		search = false;
	}
	//=======================================================================================initHomeTaskBar
	/**
	*this method add the bar with different activity to add on the agenda
	*
	*/
	private void initHomeTaskBar(){	
		taskBar = new JPanel();
		main.add(taskBar, BorderLayout.SOUTH);
		//mise en place de la bar de tache
		taskBar.setPreferredSize (new Dimension (0, 27));
		taskBar.setBackground(Color.black);
		taskBar.setLayout(new GridLayout(1,0));
		
		meeting = new JButton(new ImageIcon("data/img/agenda/meeting.png"));
		course = new JButton(new ImageIcon("data/img/agenda/entry.png"));
		rdv = new JButton(new ImageIcon("data/img/agenda/task.png"));
		
		taskBar.add(meeting);
		taskBar.add(course);
		taskBar.add(rdv);
		
		meeting.setBackground(Color.black);
		meeting.addActionListener(controller);
		meeting.setActionCommand("addMeeting");
		meeting.setToolTipText ("Ajouter reunion");
		course.setBackground(Color.black);
		course.addActionListener(controller);
		course.setActionCommand("addCourse");
		course.setToolTipText ("Ajouter cours");
		rdv.setBackground(Color.black);
		rdv.addActionListener(controller);
		rdv.setActionCommand("addRdv");
		rdv.setToolTipText ("Ajouter rendez-vous");
		
	}
	
	//=======================================================================================initHomeDateChooser
	/**
	* Methode qui met en place le changement de date par fleche
	*/	
	public void initHomeDateChooser(){

		
		moveDate = new JPanel();
		
		main.add(moveDate, BorderLayout.NORTH);
		dateChoosen = new JLabel(dateChoosenLbl.split(" ")[1]);
		prev = new JButton(new ImageIcon("data/img/agenda/prev.png"));
		next = new JButton(new ImageIcon("data/img/agenda/next.png"));
		
		moveDate.setPreferredSize(new Dimension(0,25));
		moveDate.setLayout(new BorderLayout());
		moveDate.add(prev,BorderLayout.WEST);
		moveDate.add(dateChoosen,BorderLayout.CENTER);
		moveDate.add(next,BorderLayout.EAST);
		moveDate.setBackground(Color.black);
		
		prev.setBackground(Color.black);
		prev.addActionListener(controller);
		prev.setActionCommand("prevMonth");
		next.setBackground(Color.black);
		next.addActionListener(controller);
		next.setActionCommand("nextMonth");
		
		
		dateChoosen.setBackground(Color.black);
		dateChoosen.setForeground(Color.white);
		dateChoosen.setHorizontalAlignment(SwingConstants.CENTER);	

	}
	
	//=======================================================================================initHomeDisplay
	/**
	* initialise la partie centrale du calendrier contenant le calendrier et els activite
	*/
	private void initHomeDisplay(){
		display = new JPanel();
		main.add(display,BorderLayout.CENTER);
		display.setLayout(new BorderLayout());
		cal = new JPanel();
		activity = new JPanel();
		activity.setPreferredSize(new Dimension(0,80));
		activity.setBackground(Color.DARK_GRAY);
		activity.setForeground(Color.white);
		
		
		display.add(activity, BorderLayout.SOUTH);
		display.add(cal, BorderLayout.CENTER);
		leCalendrier.initCalendrierCentre(dateChoosenLbl);
	
		main.repaint();
		main.validate();
	}
	
	//=======================================================================================launchAgendaView
	/**
	* 	lance la mise en place de l'application
	*/
	public void launchAgendaView() {
		panel.removeAll();
		initHome();
	}
	
	//=======================================================================================initEntrySelect
	/**
	* 	initialise le panneau ou sont lister les activite du jour selectionne
	*/
	public void initEntrySelect(){
		activity.setLayout(new BorderLayout());
		JLabel day = new JLabel(dateChoosenLbl);
		ArrayList<String> entry = controller.getEvt(dateChoosenLbl.split(" ")[1]);
		
		day.setHorizontalAlignment(SwingConstants.CENTER);
		day.setForeground(Color.white);
		activity.add(day, BorderLayout.NORTH);
		activity.setForeground(Color.white);
		listeEvt = new JList(new DefaultListModel());
		JScrollPane scroll = new JScrollPane(listeEvt);
		activity.add(scroll);
		listeEvt.setBackground(Color.darkGray );
		listeEvt.setForeground(Color.white);
		for (String tmp : entry){
			((DefaultListModel) listeEvt.getModel()).addElement(tmp);
		}
		DefaultListCellRenderer centerRenderer = new DefaultListCellRenderer();
		centerRenderer.setHorizontalAlignment(JLabel.CENTER);
		listeEvt.setCellRenderer(centerRenderer);
		// listeEvt.setHorizontalTextPosition(SwingConstants.CENTER); 
		listeEvt.addMouseListener(new EcouteurListeActivity(controller.getEngine(), this));
	}
		

//###########################################################################################
//							Gestion du menu
//###########################################################################################

	//=======================================================================================initMenu
	/**
	*permet d'afficher les options correspondantes a la  page d'ou le menu est appele
	*
	*@param etat the page which call this method
	*/
	public void initMenu(String etat){
		//creation des instances d'objet necessaire au menu option
		addAct = new JMenu("Nouvelle Activite");
		changeView = new JMenuItem("Changer de vue");
		save = new JMenuItem("Sauvegarder l'agenda");
		open = new JMenuItem("Charger un agenda");
		delete = new JMenu("Supprimer evenement");
		searchDate = new JMenuItem("Chercher date");
		delAnEvt = new JMenuItem("Selectionne");
		delPrevEvt = new JMenuItem("Anciens");
		delAllEvt = new JMenuItem("Tous");
		addCourse = new JMenuItem("Cours");
		addRdv = new JMenuItem("Rendez-vous");
		addMeeting = new JMenuItem("Rencontre");
		addActivity = new JMenuItem("Autre");
		
		//initialisation et parametrage du menu
		optionPane = new JPopupMenu();
		optionPane.setPopupSize(new Dimension(160,140)); 
		optionPane.setBackground(Color.black);
		optionPane.setForeground(Color.white);
		
		//ajout des boutons prinsipaux dans le menu
		optionPane.add(addAct);
		optionPane.add(delete);
		// optionPane.add(changeView);
		optionPane.add(searchDate);
		optionPane.add(save);
		optionPane.add(open);
		
		//ajout des sous menus dans les menu correspondants
		addAct.add(addCourse);
		addAct.add(addRdv);
		addAct.add(addMeeting);
		addAct.add(addActivity);
		delete.add(delAnEvt);
		delete.add(delPrevEvt);
		delete.add(delAllEvt);
		
		//mise en forme pour lisibilite - fond noir
		save.setBackground(Color.black);
		open.setBackground(Color.black);
		searchDate.setBackground(Color.black);
		delAllEvt.setBackground(Color.black);
		delAnEvt.setBackground(Color.black);
		delPrevEvt.setBackground(Color.black);
		addCourse.setBackground(Color.black);
		addRdv.setBackground(Color.black);
		addMeeting.setBackground(Color.black);	
		addActivity.setBackground(Color.black);	
		changeView.setBackground(Color.black);	
		
		//mise en forme pour lisibilite - texte en blanc
		delPrevEvt.setForeground(Color.white);
		delAllEvt.setForeground(Color.white);
		delAnEvt.setForeground(Color.white);
		open.setForeground(Color.white);
		delete.setForeground(Color.white);
		save.setForeground(Color.white);
		searchDate.setForeground(Color.white);
		addAct.setForeground(Color.white);
		addCourse.setForeground(Color.white);
		addRdv.setForeground(Color.white);
		addActivity.setForeground(Color.white);
		addMeeting.setForeground(Color.white);
		changeView.setForeground(Color.white);
		
		//ajout des evenements
		addMeeting.addActionListener(controller);
		addCourse.addActionListener(controller);
		addActivity.addActionListener(controller);
		addRdv.addActionListener(controller);
		delAllEvt.addActionListener(controller);
		delPrevEvt.addActionListener(controller);
		delAnEvt.addActionListener(controller);
		save.addActionListener(controller);
		open.addActionListener(controller);
		searchDate.addActionListener(controller);
		

		addMeeting.setActionCommand("addMeeting");
		addCourse.setActionCommand("addCourse");
		addActivity.setActionCommand("addActivity");
		addRdv.setActionCommand("addRdv");
		delAllEvt.setActionCommand("deleteAll");
		delPrevEvt.setActionCommand("deletePrevious");
		delAnEvt.setActionCommand("deleteOne");
		save.setActionCommand("save");
		open.setActionCommand("load");
		searchDate.setActionCommand("search");

	}
	
	//=======================================================================================initOptionBar
	/**
	*This method display the toolbar with 2 buttons for options
	*
	*@param etat String who indicate the calling method
	*/
	public void initOptionBar(String etat){
		//init des boutons 
		optionBar = new JPanel();
		option = new JButton("Options");
		retour = new JButton("Retour");
		//ajout du pannel avec bouton a l'affichage principal et configuration
		panel.add(optionBar, BorderLayout.SOUTH);
		optionBar.setPreferredSize (new Dimension (0, 27));
		optionBar.setLayout(new GridLayout(1,2));
		optionBar.setBackground(Color.black);
		
		//mise en place des bouton et ajout d'ecouteur
		optionBar.add(option);
		optionBar.add(retour);
		retour.setActionCommand("retour");
		option.setActionCommand(etat);
		
		if (etat == "home"){
			retour.setEnabled(false);
		}else{
			retour.setActionCommand("retour");
			option.setActionCommand("");
		}
		

		//effet de style pour les bouttons tout en bas
		retour.setHorizontalAlignment(SwingConstants.RIGHT);
		retour.setBackground(Color.black);
		retour.setForeground(Color.white);
		retour.addActionListener(controller);

		option.setHorizontalAlignment(SwingConstants.LEFT);
		option.setBackground(Color.black);
		option.setForeground(Color.white);
		option.addActionListener(controller);
		
		//init du menu qui correspond au boutton option
		this.initMenu(etat);
		
	}

//##########################################################################################################
//										Methodes get / set
//##########################################################################################################

	/** 
	* Retourne le panel du menu option
	* @return le panel */
	public JPopupMenu getMenu () { return optionPane ; }
	/** 
	* Retourne le bouton du menu option
	* @return le bouton */
	public JButton getOptions () { return option ; }
	/** 
	* Retourne le bouton pour le retour
	* @return le bouton */
	public JButton getRetour () { return retour ; }
	/** 
	* Retourne le panel de l'application
	* @return le panel */
	public JPanel getPanel() {return panel; }
	/** 
	* Retourne le panel principal de l'application agenda 
	* @return le panel principal*/ 
	public JPanel getMainPanel() {return main; }
	/** 
	* Retourne la date selectionner
	* @return dateChoosenLbl*/ 
	public String getDateChoosenLbl() {return dateChoosenLbl;}
	/** 
	* Retourne la date sans le jour
	* @return date*/
	public String getDateChoosen() {return dateChoosenLbl.split(" ")[1];}
	/** 
	* Retourne le Calendrier
	* @return le calendrier*/
	public JPanel getCalendar(){ return cal ;}
	/** 
	* Retourne
	* @return le boutton retour */
	public JButton getBackButton(){	return retour ;}
	/** 
	* Retourne
	* @return le menu d'ajout*/
	public JMenu getMenuAdd(){	return addAct ;}
	/** 
	* Retourne la liste recapitulatif des evenements 
	* @return la liste des activites */
	public JList getListeActiviteJour() { return listeEvt; }
	/** 
	* Retourne
	* @return le nom du fichier selectionner*/
	public JTextField getNameFile(){ return nomFic;}
	/** 
	* Retourne 
	* @return la liste de fichier*/
	public JList getNameList(){ return listeFic;}
	/** 
	* Retourne le jour actuel
	* @return la chaine de caractère du jour */
	public String getToday() { return leCalendrier.getToday(); }
	/** 
	* Retourne
	* @return la date de l'evenement */
	public String getSearchDate(){ return (String) day.getSelectedItem()+"/"+month.getSelectedItem()+"/"+year.getSelectedItem() ;}
	/** 
	* Retourne
	* @return l'etat de l'agenda*/
	public boolean isSearching(){ return  search ;}
	/** 
	* Retourne
	* @return l'activite selectionner*/
	public String getSelectAct() { return selectItemAct ; }
	

	/** 
	* Modifie
	* @param day le jour
	* @param month le mois
	* @param year l'annee
	*/
	public void setDateChoosenLbl(String day, String month, String year){
		String dayLabel = dayName[ new GregorianCalendar(Integer.parseInt(year),Integer.parseInt(month)-1,Integer.parseInt(day)).get(Calendar.DAY_OF_WEEK)];
		dateChoosenLbl = dayLabel+" "+day+"/"+month+"/"+year ;
	}
	/** 
	* Modifie
	* @param newDate la nouvelle date
	*/
	public void setDateChoosenLbl(String newDate){
		dateChoosenLbl = newDate;
	}
	/** 
	* Modifie
	* @param newDate
	*/
	public void setDateChoosen(String newDate){
		dateChoosen.setText(newDate);
	}
	/** 
	* Modifie
	* @param nom
	*/
	public void setFile(String nom){
		leFic = nom ;
	}
	/** 
	* Modifie 
	* @param nom 
	*/
	public void setSelectAct(String nom){
		selectItemAct = nom ;
	}
	
}